# 4.4 线条检测

## 4.4.1 算法简介

![10](./media/10.png)

判断图像中是否有线段，如果有则会返回线段两个端点的坐标以及倾斜角度，如果线段为曲线，则返回由起点与终点相连所形成的直线的角度。

-----------

## 4.4.2 代码块介绍

1. ![a45](./media/a45.png)块，用于返回线条的数据。

|    参数    |          含义           |
| :--------: | :---------------------: |
| 终点横坐标 | 线段终点（远端）横坐标x |
| 终点纵坐标 | 线段终点（远端）纵坐标y |
| 起点横坐标 | 线段起点（近端）横坐标x |
| 起点纵坐标 | 线段起点（近端）纵坐标y |
|  倾斜角度  |     线段的倾斜角度      |

<span style="color:red;font-size:20px;">注意：倾斜角逆时针增大，线段水平向右时其倾斜角为0°，线段垂直向上时其倾斜角为90°，线段水平向左时其倾斜角为 180°。算法不会向下检测输出角度。</span>

---------------

## 4.4.3 使用技巧

1. 请勿使用表面光滑的地图，避免反光导致检测失败；
2. 背景与线条边界应清晰分明，颜色差异明显，譬如白底黑线；
3. 背景尽量简单，颜色单一；如果背景杂乱，则可能会检测背景中的线条；
4. 线条粗细应适中，过细或过宽均影响检测；
5. 巡线时，第一条线段始终为屏幕下方最先检测到的线段；

--------------

## 4.4.4 代码

1. 在代码启动中设置串口波特率为`9600`，然后设置AI视觉模块的通信方式为`I2C`，再设置AI视觉模块运行`线条检测`模式

![a47](./media/a47.png)

2. 使用判断模块对检测数量进行判断，只有检测数量大于0时才进行线条数据的输出，注意选择的是`线条检测` ；通过串口打印模块对识别到的线条数据进行打印。

![](./media/a48.png)

**完整代码：**

![a46](./media/a46.png)

--------------------

## 4.4.5 代码结果

上传代码后，AI视觉模块将会对摄像头拍到的地方进行分析如果有线条就会进行识别，并且在串口监视器中打印线条的起始和结束坐标以及角度（角度的判别是垂直线是90度，水平垂直线是180度）。

![10](./media/10.png)

![a49](./media/a49.png)